﻿using System.IO;
using DigDes.DSchool.SUPS.DataAccess.Interface;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DigDes.DSchool.SUPS.DataAccess.FileLoaders
{
    public class FileLoader : ILoader<LoaderStringDTO>
    {
        // TODO: Реализовать интерфейс загрузчика и логику проверки типа файла/лоигку загрузки файла

        public bool CheckType(string filePath)
        {
            //Проверка типа файла
            string e = Path.GetExtension(filePath);
            if (e != ".OUT") return false;
            if (e != ".out") return false;
            return true;
        }

        public bool CheckFirstString(string filePath)
        {
            //Проверка правильности первой строки(70 символов)
            using (StreamReader sr = new StreamReader(filePath))
            {
                string line = sr.ReadLine();
                if (line.Length != 70) return false;
            }
            return true;
        }

        public IEnumerable<LoaderStringDTO> Load(string filePath)
        {

            using (StreamReader sr = new StreamReader(filePath))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    var row = new LoaderStringDTO();
                    row.CarriageNumber      = line.Substring(0, 8);
                    row.ContentWeight       = Int32.Parse(line.Substring(8, 3));
                    row.DestinationStation  = line.Substring(11, 5);
                    row.ContentCode         = line.Substring(16, 5);
                    row.ConsigneeСode       = line.Substring(21, 4);
                    row.CarriageParkType    = line.Substring(25, 2);
                    row.StartStation        = line.Substring(27, 5);
                    row.OperationCode       = line.Substring(32, 2);
                    row.OperationDate       = line.Substring(34, 4);
                    row.OperationYear       = line.Substring(38, 2);
                    row.OperationTime       = line.Substring(40, 4);
                    row.OperationStation    = line.Substring(44, 5);
                    row.PuttingRoad         = line.Substring(49, 2);
                    row.ReceptionRoad       = line.Substring(51, 2);
                    row.TrainIndex          = line.Substring(53, 13);
                    row.TrainNumber         = Int32.Parse(line.Substring(66, 4));
                    //row.timeOf = new DateTime();
                    //row.timeOf.AddDays("это 9")
                    yield return row;  
                }
            }
        }
    }
}
